package org.example.listener;

import org.example.operator.OperatorField;
import org.example.undo.Undo;
import com.google.common.eventbus.Subscribe;

import java.util.Objects;

/**
 * undo操作监听器，当两个数据进行加减乘除时，记录操作前的数据。
 * @author Silver
 */
public class UndoEventListener{

    /**
     * 监听器名称
     */
    private String name;

    /**
     * undo 接口，可以用于不同的实现来代替
     */
    private Undo undo;

    public UndoEventListener(String name) {
        this.name = name;
    }

    public UndoEventListener(String name, Undo undo) {
        this.name = name;
        this.undo = undo;
    }

    /**
     * 监听方法
     * @author Silver
     * @param event 两个数据操作事件
     * @return void
     */
    @Subscribe
    public void listen(NumberEvent event){
        Object obj = event.getObj();
        if (Objects.isNull(obj)){
            //异常情况灵活处理
            return;
        }
        if (!(obj instanceof OperatorField)){
            //异常情况灵活处理
            return;
        }
        //操作具体数据的属性
        OperatorField operatorField = (OperatorField) obj;
        //记录undo 操作日志
        undo.undoLog(operatorField.getBeforeResult().getFinalResult());
    }

}
